package com.open.capacity.user.dao;

import com.open.capacity.common.model.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 称号持久层
 * @author liutao
 * @date 2021-02-01 16:28
 */
@Mapper
public interface TitleDao {

    /**
     * 模糊查询称号
     * @param params
     * @return
     */
    List<Title> getSelectTitles(Map<String, Object> params);

    /**
     * 获取称号总数
     * @param params
     * @return
     */
    int count(Map<String, Object> params);

    /**
     * 添加称号
     * @param title
     * @return
     */
    int addTitle(Title title);

    /**
     * 修改称号
     * @param title
     * @return
     */
    int updateTitle(Title title);

    /**
     * 删除称号
     * @param titlid
     * @return
     */
    int delTitle(int titlid);

    /**
     * 判断称号是否存在
     * @param ttname
     * @return
     */
    List<Title> isHaveTitle(String ttname);

    /**
     * 获取自己获取称号总数
     * @param params
     * @return
     */
    int countByUserId(Map<String, Object> params);

    /**
     * 查询自己获得的称号
     * @param params
     * @return
     */
    List<UserTitle> getTitleByUserId(Map<String, Object> params);

    /**
     * 添加角色称号关联信息
     * @param roleTitle
     */
    int addRoleTitle(RoleTitle roleTitle);

    List<Title> isHaveTitleExceptSelf(@Param("ttname") String ttname, @Param("selfTitlid") Integer selfTitlid);

    List<TitleRule> getRuleByTypeAndRoleId(@Param("typeId") Integer typeId,@Param("roleId")Integer roleId);

    Integer updateTitleByUserId(@Param("userId") Integer userId, @Param("points") Integer points);

    TitleRule findTitleRuleByRoleIdAndPoints(@Param("roleId") Long roleId);

    List<Integer> findTitleByRoleIdAndPoints(@Param("roleId") Long roleId, @Param("points") Double points);

    Integer isHaveThisTitle(@Param("titleId") Integer titleId, @Param("userId") Long userId);

    Integer addTitleToUser(@Param("userId") Long userId,@Param("titleId") Integer titleId);

    List<Integer> findTitleByRoleId(@Param("roleId") Long id);

    void deleteTitleByUserIdAndTitleId(@Param("titleId") Integer titleId,@Param("userId") Long userId);

    void updateUserTitleByTitleId(Title title);

    List<Integer> findTitleByTypeCodeAndPoints(@Param("typeCode") String typeCode,@Param("points") Double points);
}
